package clases.academico;

import clases.general.Persona;
import CapaDatos.DataSource;
import CapaDatos.Sql;
import global.Dialogos;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

/**
 *
 * @author Jose Daniel
 */
public class Alumno extends Persona {

    private String cedulaAlumno;
    private String lugarnacimiento;
    private String fechanacimiento;
    private boolean estado;
    private String genero;
    private String correo;
    private String sql;
    private final DataSource dt;
   

    public Alumno() {
        dt = new DataSource();
 
    }

    public boolean isEstado() {
        return estado;
    }

    public void setEstado(boolean estado) {
        this.estado = estado;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public String getCorreo() {
        return correo;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public String getLugarnacimiento() {
        return lugarnacimiento;
    }

    public void setLugarnacimiento(String lugarnacimiento) {
        this.lugarnacimiento = lugarnacimiento;
    }

    public String getFechanacimiento() {
        return fechanacimiento;
    }

    public void setFechanacimiento(String fechanacimiento) {
        this.fechanacimiento = fechanacimiento;
    }

    public String getCedulaAlumno() {
        return cedulaAlumno;
    }

    public void setCedulaAlumno(String cedulaAlumno) {
        this.cedulaAlumno = cedulaAlumno;
    }

    public boolean guardarAlumno() {
        if (this.ExistenciaAlumno() == true) {
            Dialogos.Error("El alumno ya existe");
            return false;
        } else {
            if (this.guardarPersona() == true
                    && Sql.insertar("INSERT INTO ALUMNO VALUES('" + this.getCedulaRuc()
                            + "','" + lugarnacimiento + "','" + fechanacimiento + "', "
                            + "'" + genero + "', '" + correo + "', " + true + ")") == true) {
                Dialogos.GuardadoconExito();
                return true;
            } else {
                Dialogos.Error("Error al guardar el Alumno");
                return false;
            }
        }

    }

    public void listarAlumnoenJList(JList jls, String cedulaFamiliar) {
//        JLista ls = new JLista(jls);
//        Sql.getConsulta("SELECT (SELECT PERSONA.APELLIDO||' '||PERSONA.NOMBRE FROM PERSONA WHERE PERSONA.IDPERSONA=ALUMNO.IDPERSONA)AS ALUMNO\n"
//                + "FROM FAMILIARALUMNO\n"
//                + "JOIN ALUMNO ON FAMILIARALUMNO.IDALUMNO=ALUMNO.IDALUMNO\n"
//                + "JOIN FAMILIAR ON FAMILIAR.IDFAMILIAR=FAMILIARALUMNO.IDFAMILIAR \n"
//                + "JOIN PERSONA ON PERSONA.IDPERSONA=FAMILIAR.IDPERSONA AND PERSONA.CEDULARUC='" + cedulaFamiliar + "' ", dt);
//        while (dt.next()) {
//            ls.agregarItem(dt.getString(1));
//        }
    }

    public void FiltrarAlumnoenJList(JList jls, String apellido) {

//        JLista ls = new JLista(jls);
//        Sql.getConsulta("SELECT CONCAT (PERSONA.APELLIDO,' ',PERSONA.NOMBRE) FROM MATRICULA JOIN PERIODOMATRICULA ON MATRICULA.IDPERIODOMATRICULA=PERIODOMATRICULA.IDPERIODOMATRICULA AND PERIODOMATRICULA.ESTADO='TRUE'\n"
//                + "JOIN ALUMNO ON MATRICULA.IDALUMNO=ALUMNO.IDALUMNO JOIN PERSONA ON ALUMNO.IDPERSONA=PERSONA.IDPERSONA\n"
//                + "WHERE(PERSONA.APELLIDO LIKE upper('" + apellido + "%')) ", dt);
//        while (dt.next()) {
//            ls.agregarItem(dt.getString(1));
//        }
    }

    public void getDeudasPensiones(JComboBox cbo, String nombre) {
        cbo.removeAllItems();
        Sql.getConsulta("SELECT CONCEPTO.CONCEPTO\n"
                + "FROM CONCEPTO WHERE CONCEPTO.IDCONCEPTO NOT IN(\n"
                + "SELECT HISTORIALPAGO.IDCONCEPTO FROM HISTORIALPAGO JOIN DETALLEFACTURA ON DETALLEFACTURA.IDCONCEPTO=HISTORIALPAGO.IDCONCEPTO \n"
                + "AND DETALLEFACTURA.IDFACTURA=HISTORIALPAGO.IDFACTURA\n"
                + "JOIN MATRICULA ON MATRICULA.IDMATRICULA=HISTORIALPAGO.IDMATRICULA\n"
                + "JOIN ALUMNO ON MATRICULA.IDALUMNO=ALUMNO.IDALUMNO\n"
                + "JOIN PERSONA ON ALUMNO.IDPERSONA=PERSONA.IDPERSONA AND PERSONA.APELLIDO||' '||PERSONA.NOMBRE='" + nombre + "')", dt);
        while (dt.next()) {
            cbo.addItem(dt.getString(1));
        }

    }

    public boolean actualizarAlumno() {
        if (actualizarPersona() == true
                && Sql.actualizar("UPDATE ALUMNO SET LUGARNACIMIENTO='" + this.lugarnacimiento + "', "
                        + "FECHANACIMIENTO='" + this.fechanacimiento + "', "
                        + "GENERO='" + this.genero + "', CORREO='" + this.correo + "' "
                        + "WHERE CEDULARUC='" + this.getCedulaRuc() + "'") == true) {
            global.Mensajes.mostrarMensaje("Correcto!", "Datos actualizados correctamente...", 1);
            return true;
        } else {
            Dialogos.Error("Error al actualizar al Alumno");
            return false;
        }

    }

    public boolean ExistenciaAlumno() {
        //this.desigacionCedula();
        sql = "SELECT * FROM ALUMNO JOIN PERSONA "
                + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE ALUMNO.CEDULARUC='" + this.getCedulaRuc() + "' ";
        return Sql.isExiste(sql);
    }

    public boolean ExistenciaFotoAlumno() {
        sql = "SELECT FOTO FROM ALUMNO "
                + "WHERE CEDULARUC='" + this.getCedulaRuc() + "'";
        Sql.getConsulta(sql, dt);
        String foto = "";
        while (dt.next()) {
            foto = dt.getString(1);
        }
        return !"".equals(foto) && foto != null;
    }
    
    

    /* public boolean ExistenciaAlumno() {
     this.desigacionCedula();
     // if (!cedula.equals(this.cedulaAlumno)) {
     sql = "SELECT * FROM ALUMNO JOIN PERSONA "
     + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
     + "WHERE ALUMNO.CEDULARUC='" + cedula + "' AND ALUMNO.CEDULARUC!='" + this.cedulaAlumno + "'";
     System.out.println(sql);
     return Sql.isExiste(sql);
     // } /*else {
     //      return false;
     //   }*/
    //  }
    public String SqlGeneralAlumno() {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "TO_CHAR(FECHANACIMIENTO, 'DD-MM-yyyy'), TELEFONO, GENERO, DIRECCION, CIUDAD "
                + "FROM ALUMNO JOIN PERSONA "
                + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN CIUDAD ON CIUDAD.IDCIUDAD=PERSONA.IDCIUDAD "
                + "ORDER BY(CONCAT(APELLIDO,' ',NOMBRE))";
        return sql;
    }

    public String SqlAlumno(String alumno) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "TO_CHAR(FECHANACIMIENTO, 'DD-MM-yyyy'), TELEFONO, GENERO, DIRECCION, CIUDAD "
                + "FROM ALUMNO JOIN PERSONA "
                + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN CIUDAD ON CIUDAD.IDCIUDAD=PERSONA.IDCIUDAD "
                + "WHERE CONCAT(APELLIDO,' ',NOMBRE) LIKE '" + alumno + "%' "
                + "ORDER BY(CONCAT(APELLIDO,' ',NOMBRE))";
        return sql;
    }
    
    public String SqlNombre(String nombre) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "TO_CHAR(FECHANACIMIENTO, 'DD-MM-yyyy'), TELEFONO, GENERO, DIRECCION, CIUDAD "
                + "FROM ALUMNO JOIN PERSONA "
                + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN CIUDAD ON CIUDAD.IDCIUDAD=PERSONA.IDCIUDAD "
                + "WHERE NOMBRE LIKE '" + nombre + "%' "
                + "ORDER BY(CONCAT(APELLIDO,' ',NOMBRE))";
        return sql;
    }
    
    public String SqlApellido(String apellido) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "TO_CHAR(FECHANACIMIENTO, 'DD-MM-yyyy'), TELEFONO, GENERO, DIRECCION, CIUDAD "
                + "FROM ALUMNO JOIN PERSONA "
                + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN CIUDAD ON CIUDAD.IDCIUDAD=PERSONA.IDCIUDAD "
                + "WHERE APELLIDO LIKE '" + apellido + "%' "
                + "ORDER BY(CONCAT(APELLIDO,' ',NOMBRE))";
        return sql;
    }

    public String SqlFechaNacimiento(String fecha) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "TO_CHAR(FECHANACIMIENTO, 'DD-MM-yyyy'), TELEFONO, GENERO, DIRECCION, CIUDAD "
                + "FROM ALUMNO JOIN PERSONA "
                + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN CIUDAD ON CIUDAD.IDCIUDAD=PERSONA.IDCIUDAD "
                + "WHERE FECHANACIMIENTO = '" + fecha + "' "
                + "ORDER BY(CONCAT(APELLIDO,' ',NOMBRE))";

        return sql;
    }

    public String SqlCiudad(String ciudad) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "TO_CHAR(FECHANACIMIENTO, 'DD-MM-yyyy'), TELEFONO, GENERO, DIRECCION, CIUDAD "
                + "FROM ALUMNO JOIN PERSONA "
                + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN CIUDAD ON CIUDAD.IDCIUDAD=PERSONA.IDCIUDAD "
                + "WHERE CIUDAD = '" + ciudad + "' "
                + "ORDER BY(CONCAT(APELLIDO,' ',NOMBRE))";

        return sql;
    }

    public String SqlGenero(String genero) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "TO_CHAR(FECHANACIMIENTO, 'DD-MM-yyyy'), TELEFONO, GENERO, DIRECCION, CIUDAD "
                + "FROM ALUMNO JOIN PERSONA "
                + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN CIUDAD ON CIUDAD.IDCIUDAD=PERSONA.IDCIUDAD "
                + "WHERE GENERO = '" + genero + "' "
                + "ORDER BY(CONCAT(APELLIDO,' ',NOMBRE))";

        return sql;
    }

    public String SqlCedulaAlumno(String cedula) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "TO_CHAR(FECHANACIMIENTO, 'DD-MM-yyyy'), TELEFONO, GENERO, DIRECCION, CIUDAD "
                + "FROM ALUMNO JOIN PERSONA "
                + "ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN CIUDAD ON CIUDAD.IDCIUDAD=PERSONA.IDCIUDAD "
                + "WHERE ALUMNO.CEDULARUC LIKE ('" + cedula + "%') "
                + "ORDER BY(CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public void ConsultaAlumno(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("Nº");
        modelo.addColumn("CEDULA");
        modelo.addColumn("ALUMNO");
        modelo.addColumn("FECHA NACIMIENTO");
        modelo.addColumn("EDAD");
        modelo.addColumn("TELEFONO");
        modelo.addColumn("GENERO");
        modelo.addColumn("DIRECCION");
        modelo.addColumn("CIUDAD");
        DefaultTableCellRenderer centrar = new DefaultTableCellRenderer();
        centrar.setHorizontalAlignment(SwingConstants.CENTER);
        tabla.getColumnModel().getColumn(0).setCellRenderer(centrar);
        tabla.getColumnModel().getColumn(4).setCellRenderer(centrar);
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(10);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(40);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(250);
        columna = tabla.getColumnModel().getColumn(3);
        columna.setPreferredWidth(80);
        columna = tabla.getColumnModel().getColumn(4);
        columna.setPreferredWidth(10);
        columna = tabla.getColumnModel().getColumn(5);
        columna.setPreferredWidth(40);
        columna = tabla.getColumnModel().getColumn(6);
        columna.setPreferredWidth(40);
        columna = tabla.getColumnModel().getColumn(7);
        columna.setPreferredWidth(300);
        columna = tabla.getColumnModel().getColumn(8);
        columna.setPreferredWidth(80);
        sql = objPaginacion.getPaginacion(sql, pagina, 50);
        Sql.getConsulta(sql, dt);
        String[] fila;
        int n = (pagina * 50) - 49;
        while (dt.next()) {
            fila = new String[9];
            fila[0] = Integer.toString(n);
            fila[1] = dt.getString(1);
            fila[2] = dt.getString(2);
            fila[3] = dt.getString(3);
            fila[4] = Integer.toString(global.Conversiones.calcularEdad(dt.getString(3)));
            fila[5] = dt.getString(4);
            fila[6] = dt.getString(5);
            fila[7] = dt.getString(6);
            fila[8] = dt.getString(7);
            modelo.addRow(fila);
            n++;
        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }
    
    public void BuscarAlumno(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("Nº");
        modelo.addColumn("CEDULA");
        modelo.addColumn("ALUMNO");
       
        DefaultTableCellRenderer centrar = new DefaultTableCellRenderer();
        centrar.setHorizontalAlignment(SwingConstants.CENTER);
        tabla.getColumnModel().getColumn(0).setCellRenderer(centrar);
        
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(10);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(60);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(350);
        sql = objPaginacion.getPaginacion(sql, pagina, 25);
        Sql.getConsulta(sql, dt);
        String[] fila;
        int n = (pagina * 25) - 24;
        while (dt.next()) {
            fila = new String[3];
            fila[0] = Integer.toString(n);
            fila[1] = dt.getString(1);
            fila[2] = dt.getString(2);
                       
            modelo.addRow(fila);
            n++;
        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public boolean eliminarAlumno(String alumno) {
        if (Sql.isExiste("SELECT * FROM MATRICULA \n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA \n"
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "AND CONCAT(APELLIDO,' ',NOMBRE)='" + alumno + "'") == true) {
            Dialogos.Error("Alumno matriculado en el periodo actual o periodos anteriores... No se puede eliminar");
            return false;
        } else if (global.Mensajes.mostrarPregunta("¿Realmente desea eliminar el Alumno?") == true) {
            sql = "DELETE FROM ALUMNO WHERE CEDULARUC "
                    + "IN (SELECT CEDULARUC FROM PERSONA "
                    + "WHERE CONCAT(APELLIDO,' ',NOMBRE)='" + alumno + "')";
            if (Sql.eliminar(sql) && this.eliminarPersona()){
                return true;
            }
        }
        return false;
    }

    public void llenardatosAlumno() {
        sql = "SELECT CEDULARUC, LUGARNACIMIENTO, "
                + "TO_CHAR(FECHANACIMIENTO, 'DD/MM/yyyy'), "
                + "GENERO, CORREO FROM ALUMNO "
                + "WHERE CEDULARUC='" + this.getCedulaRuc() + "'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.lugarnacimiento = dt.getString(2);
            this.fechanacimiento = dt.getString(3);
            this.genero = dt.getString(4);
            this.correo = dt.getString(5);

        }
    }
}
